
Project 2
4. Démarche méthodologique d’analyses du jeu de données
import warnings
warnings.filterwarnings('ignore')
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from wordcloud import WordCloud
%matplotlib inline
pd.set_option('display.max_row', 111)
pd.set_option('display.max_column', 111)
df = pd.read_csv('data/p2-arbres-fr.csv', sep=';')
df.head(5)
| id | type_emplacement | domanialite | arrondissement | complement_addresse | numero | lieu | id_emplacement | libelle_francais | genre | espece | variete | circonference_cm | hauteur_m | stade_developpement | remarquable | geo_point_2d_a | geo_point_2d_b | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 99874 | Arbre | Jardin | PARIS 7E ARRDT | NaN | NaN | MAIRIE DU 7E 116 RUE DE GRENELLE PARIS 7E | 19 | Marronnier | Aesculus | hippocastanum | NaN | 20 | 5 | NaN | 0.0 | 48.857620 | 2.320962 |
| 1 | 99875 | Arbre | Jardin | PARIS 7E ARRDT | NaN | NaN | MAIRIE DU 7E 116 RUE DE GRENELLE PARIS 7E | 20 | If | Taxus | baccata | NaN | 65 | 8 | A | NaN | 48.857656 | 2.321031 |
| 2 | 99876 | Arbre | Jardin | PARIS 7E ARRDT | NaN | NaN | MAIRIE DU 7E 116 RUE DE GRENELLE PARIS 7E | 21 | If | Taxus | baccata | NaN | 90 | 10 | A | NaN | 48.857705 | 2.321061 |
| 3 | 99877 | Arbre | Jardin | PARIS 7E ARRDT | NaN | NaN | MAIRIE DU 7E 116 RUE DE GRENELLE PARIS 7E | 22 | Erable | Acer | negundo | NaN | 60 | 8 | A | NaN | 48.857722 | 2.321006 |
| 4 | 99878 | Arbre | Jardin | PARIS 17E ARRDT | NaN | NaN | PARC CLICHY-BATIGNOLLES-MARTIN LUTHER KING | 000G0037 | Arbre à miel | Tetradium | daniellii | NaN | 38 | 0 | NaN | NaN | 48.890435 | 2.315289 |
print("La forme des données est :", df.shape)
La forme des données est : (200137, 18)
df.describe(include=["object"])
| type_emplacement | domanialite | arrondissement | complement_addresse | lieu | id_emplacement | libelle_francais | genre | espece | variete | stade_developpement | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| count | 200137 | 200136 | 200137 | 30902 | 200137 | 200137 | 198640 | 200121 | 198385 | 36777 | 132932 |
| unique | 1 | 9 | 25 | 3795 | 6921 | 69040 | 192 | 175 | 539 | 436 | 4 |
| top | Arbre | Alignement | PARIS 15E ARRDT | SN° | PARC FLORAL DE PARIS / ROUTE DE LA PYRAMIDE | 101001 | Platane | Platanus | x hispanica | Baumannii' | A |
| freq | 200137 | 104949 | 17151 | 557 | 2995 | 1324 | 42508 | 42591 | 36409 | 4538 | 64438 |
print(df.info())
<class 'pandas.core.frame.DataFrame'> RangeIndex: 200137 entries, 0 to 200136 Data columns (total 18 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 id 200137 non-null int64 1 type_emplacement 200137 non-null object 2 domanialite 200136 non-null object 3 arrondissement 200137 non-null object 4 complement_addresse 30902 non-null object 5 numero 0 non-null float64 6 lieu 200137 non-null object 7 id_emplacement 200137 non-null object 8 libelle_francais 198640 non-null object 9 genre 200121 non-null object 10 espece 198385 non-null object 11 variete 36777 non-null object 12 circonference_cm 200137 non-null int64 13 hauteur_m 200137 non-null int64 14 stade_developpement 132932 non-null object 15 remarquable 137039 non-null float64 16 geo_point_2d_a 200137 non-null float64 17 geo_point_2d_b 200137 non-null float64 dtypes: float64(4), int64(3), object(11) memory usage: 27.5+ MB None
pd.DataFrame(df).dtypes.value_counts().plot(kind='bar', rot=0).grid()
df[df.id.duplicated()].shape
(0, 18)
Aucun id n'est dupliqué, on peut considérer que chaque ligne du jeu de données est unique
# Affichage des valeurs manquantes en %
(df.isna().sum()/df.shape[0]).sort_values(ascending=True) * 100
id 0.000000 hauteur_m 0.000000 circonference_cm 0.000000 geo_point_2d_a 0.000000 id_emplacement 0.000000 lieu 0.000000 geo_point_2d_b 0.000000 arrondissement 0.000000 type_emplacement 0.000000 domanialite 0.000500 genre 0.007995 libelle_francais 0.747988 espece 0.875400 remarquable 31.527404 stade_developpement 33.579498 variete 81.624088 complement_addresse 84.559577 numero 100.000000 dtype: float64
# Affichage des valeurs manquantes en "heatmap" avec la librarie seaborn
plt.figure(figsize=(15,10))
sns.heatmap(df.isna(), cmap="Blues", cbar=False).grid()
plt.show()
df.drop(['id', 'numero', 'type_emplacement', 'complement_addresse', 'id_emplacement', 'variete'], axis=1, inplace=True)
df.shape
(200137, 12)
print(df["circonference_cm"].min())
print(df["circonference_cm"].max())
print(df["hauteur_m"].min())
print(df["hauteur_m"].max())
0 250255 0 881818
df_quanti = ["circonference_cm", "hauteur_m"]
for col in df[df_quanti]:
plt.figure()
sns.boxplot(x=df[col])
plt.title(col)
plt.show()
#Pour traiter les valeurs aberrantes nous allons identifier des outliers avec l'écart inter-quartiles
#L’écart interquartile est une mesure de dispersion qui s'obtient en faisant la différence entre le troisième et le premier quartile : EI = Q3 - Q1
#EI est un estimateur statistique robuste.
#Q1 : 1er quartile est la donnée de la série qui sépare les 25 % inférieurs des données
#Q3 : 3eme quartile est la donnée de la série qui sépare les 75 % inférieurs des données
#Formule : EI = Q3 - Q1
Q1 = df[["circonference_cm", "hauteur_m"]].quantile(0.25)
Q3 = df[["circonference_cm", "hauteur_m"]].quantile(0.75)
EI = Q3 - Q1
EI
circonference_cm 85.0 hauteur_m 7.0 dtype: float64
lower_limit = Q1 - 1.5*EI
upper_limit = Q3 + 1.5*EI
print(f"Limite supérieure : \n{upper_limit}\n\nLimite inférieure : \n{lower_limit}")
Limite supérieure : circonference_cm 242.5 hauteur_m 22.5 dtype: float64 Limite inférieure : circonference_cm -97.5 hauteur_m -5.5 dtype: float64
print(sum(df["circonference_cm"] == 0))
print(sum(df["hauteur_m"] == 0))
print(sum(df["hauteur_m"] == 0) & sum(df["circonference_cm"] == 0))
25867 39219 259
df_filtered = df[~((df[["hauteur_m", "circonference_cm"]] < lower_limit) | (df[["hauteur_m", "circonference_cm"]] > upper_limit)).any(axis=1)]
df_filtered.shape
(193997, 12)
var_quanti = ["circonference_cm", "hauteur_m"]
for col in df[var_quanti]:
plt.title(col)
sns.boxplot(x=df_filtered[col])
plt.show()
df_quanti = ["circonference_cm", "hauteur_m"]
for col in df[df_quanti]:
mean = round(df_filtered[col].mean(), 2)
median = round(df_filtered[col].median(), 2)
std = round(df_filtered[col].std(), 2)
print(f'Moyenne : {mean}cm ,', f'Médiane : {median}cm ,', f'Écart type : {std}cm')
plt.figure(figsize=(20,8))
sns.distplot(df_filtered[col])
## mean
plt.axvline(x=df_filtered[col].mean(), color='red', label="Moyenne")
## median
plt.axvline(x=df_filtered[col].median(), color='blue', ls='--', lw=2.5, label="Médiane")
plt.legend()
plt.show();
Moyenne : 74.8cm , Médiane : 70.0cm , Écart type : 55.37cm
Moyenne : 7.93cm , Médiane : 8.0cm , Écart type : 5.7cm
sns.heatmap(df_filtered.corr(), cmap="Blues", annot=True, fmt='.2f', linewidths=1, cbar=False)
plt.show()
ax = sns.scatterplot(x='hauteur_m',
y='circonference_cm',
data=df,
hue="stade_developpement")
ax.set(xlim=(1, 100), ylim=(1, 1000))
plt.xlabel('Hauteur en m')
plt.ylabel('Circonference en cm')
plt.title('Relation entre Hauteur, Circonférence et stade de developpement\n', fontsize=15, fontweight='bold')
plt.show()
plt.figure()
sns.histplot(data=df_filtered, x='hauteur_m',hue='stade_developpement', multiple="stack", binwidth=1)
plt.title('Distribution des hauteurs des arbres', fontsize=15, fontweight='bold')
plt.xlabel('Hauteur arbre (m)', fontsize=12)
plt.ylabel('Nombre d\'arbres', fontsize=12)
plt.show()
plt.figure(figsize=(25,10))
sns.histplot(data=df_filtered, x='circonference_cm',hue='stade_developpement', multiple="stack",binwidth=1)
plt.title('Distribution des circonferences des arbres', fontsize=15, fontweight='bold')
plt.xlabel('Hauteur arbre (m)', fontsize=12)
plt.ylabel('Nombre d\'arbres', fontsize=12)
plt.show()
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(16,10))
ax1.set_title("Hauteur par stade de développement", fontsize=15, fontweight='bold')
ax2.set_title("Circonférence par stade de développement", fontsize=15, fontweight='bold')
sns.boxplot(data=df_filtered, x="stade_developpement", y="hauteur_m", order=['A', 'J', 'M', 'JA'], ax=ax1)
sns.boxplot(data=df_filtered, x="stade_developpement", y="circonference_cm", order=['A', 'J', 'M', 'JA'], ax=ax2)
<AxesSubplot:title={'center':'Circonférence par stade de développement'}, xlabel='stade_developpement', ylabel='circonference_cm'>
quali = ["domanialite", "arrondissement", "stade_developpement", "lieu", "libelle_francais", "genre", "espece"]
for q in quali:
var_occurences = df_filtered[q].value_counts()
wordcloud = WordCloud(width=800, height=400).generate_from_frequencies(var_occurences)
plt.figure(figsize=(20,15))
plt.title(q, fontsize=20)
plt.imshow(wordcloud)
for col in quali:
print(f'{col}\n{df[col].unique()}', end='\n\n\n')
domanialite ['Jardin' 'Alignement' 'DJS' 'DFPE' 'CIMETIERE' 'DASCO' 'DAC' 'PERIPHERIQUE' 'DASES' nan] arrondissement ['PARIS 7E ARRDT' 'PARIS 17E ARRDT' 'PARIS 16E ARRDT' 'PARIS 4E ARRDT' 'PARIS 13E ARRDT' 'PARIS 12E ARRDT' 'PARIS 19E ARRDT' 'PARIS 14E ARRDT' 'PARIS 15E ARRDT' 'PARIS 3E ARRDT' 'PARIS 20E ARRDT' 'PARIS 18E ARRDT' 'PARIS 6E ARRDT' 'PARIS 11E ARRDT' 'PARIS 1ER ARRDT' 'PARIS 2E ARRDT' 'PARIS 5E ARRDT' 'VAL-DE-MARNE' 'SEINE-SAINT-DENIS' 'HAUTS-DE-SEINE' 'PARIS 9E ARRDT' 'PARIS 10E ARRDT' 'PARIS 8E ARRDT' 'BOIS DE BOULOGNE' 'BOIS DE VINCENNES'] stade_developpement [nan 'A' 'J' 'M' 'JA'] lieu ['MAIRIE DU 7E 116 RUE DE GRENELLE PARIS 7E' 'PARC CLICHY-BATIGNOLLES-MARTIN LUTHER KING' 'SQUARE ALEXANDRE ET RENE PARODI / 1 PLACE DE LA PORTE MAILLOT' ... 'TERRAIN D EDUCATION PHYSIQUE / 49 RUE OLIVIER METRA' 'RUE EDOUARD QUENU' 'RUE DU GENERAL NIESSEL'] libelle_francais ['Marronnier' 'If' 'Erable' 'Arbre à miel' 'Platane' 'Sophora' 'Prunus n. sp.' 'Hêtre' 'Micocoulier' 'Tilleul' 'Chêne' 'Savonnier' 'Copalme' 'Noyer' 'Arbre à caramel' 'Troene' 'Tulipier' 'Pin' 'Sapin' 'Cerisier à fleurs' 'Charme-Houblon' 'Cèdre' 'Paulownia' 'Thuya' 'Pommier à fleurs' 'Poirier' 'Pommier' 'Bouleau' 'Orme' 'Arbre de Judée' 'Robinier' 'Frêne' 'Aubépine' 'Fevier' 'Prunier à fleurs' 'Arbre aux quarante écus' 'Néflier commun' 'Saule' 'Magnolia' 'Prunier à fruits' 'Poirier à fleurs' 'Peuplier' 'Faux-cyprès' 'Aubepine' nan 'Plaqueminier' 'Mûrier' 'Pêcher' 'Pterocarya' 'Merisier' 'Noisetier de Byzance' 'Alisier' 'Cognassier' 'Parrotie de Perse - Arbre de fer' 'Poirier à fruits' 'Orme de Sibérie' 'Frêne à fleurs' 'Aulne' 'Troëne' 'Fontanesia' 'Cornouiller' 'Cedrele' 'Catalpa' 'Houx' 'Buis' 'Metaséquoia' 'Chicot du Canada' 'Oranger des Osages' 'Céphalotaxe' 'Sumac' 'Châtaignier' 'Ailante' 'Sequoia' 'Lilas des indes' 'Pterostyrax' 'Eucalyptus' 'Olivier' 'Figuier' 'Charme' 'Sureau' 'Epicéa' 'Sorbier' 'Amélanchier' 'Cytise' 'Filaire' 'Angélique' 'Virgilier' 'Phellodendron' 'Eleagnus - Chalef' 'Pommier à fruits' 'Cabrillet' 'Citronnier' 'Arbre à soie' 'Lilas de Perse' 'Laurier-Cerise' 'Laurier du Portugal' 'Nothofagus' 'Cyprès' 'Noisetier' 'Palmier' 'Muscadier' 'Libocèdre' 'Abelia' 'Photinia' 'Clerodendron' 'Arbre aux mouchoirs' 'Sterculier' 'Poivrier' 'Cyprès Chauve' 'Arbre à Gutta-Percha' 'Nyssa' 'Cotoneaster' 'Olivier odorant' 'Non spécifié' 'Laurier sauce' 'Arbousier' 'Araucaria' 'Cryptomeria' 'Cerisier à grappes' 'Cunninghamia' 'Hiba' 'Chèvrefeuille' 'Raisinier' 'Chitalpa' 'Néflier' 'Pistachier' 'Laburnum de Adam' 'Tapiscia' 'Mélèze' 'Caryer' 'Parrotie de Perse' 'Distylium' 'Tamaris' 'Orme de Samarie' 'Arbre à perruque' 'Chimonanthe' 'Mimosa' 'Cordyline' 'Faux dattier' 'Althéa' 'Cerisier à fruits' 'Amandier' 'Tsuga' 'Stewartia' 'Argousier' 'Papayer' 'Styrax' 'Laurier des Iroquois' 'Laurier' 'Genévrier' 'Heptacodion de Chine' 'Grenadier' 'Sapin Douglas' 'Rhododendron' 'Viorne' 'Cormier' 'Prunellier' 'Poliothyrsis' 'Caragana' 'Asiminier' 'Platycarya' 'Amla' 'Alangium' 'Euscaphis' 'Andromède' 'Sycopsis' 'Camphrier' 'Jujubier' 'Maackie' 'Staphylier' 'Seringas' 'Lilas' 'Fusain' 'Fremontia' 'Nerprun' 'Callistemon' 'Aronie' 'Myrte du Chili' 'Goyavier' 'Genêt' 'Laurier du caucase' 'Prunus Fleur n. sp.' 'Abricotier' 'Prunus Fruit n. sp.' "Fustet d' Amérique" 'Idesia' 'Laurier des Açores' 'Kalopanax' 'Ormeau épineux' 'Ostryer' 'Xanthoceras' 'Parrotiopsis' 'Garrya'] genre ['Aesculus' 'Taxus' 'Acer' 'Tetradium' 'Platanus' 'Sophora' 'Prunus' 'Fagus' 'Celtis' 'Tilia' 'Quercus' 'Koelreuteria' 'Liquidambar' 'Juglans' 'Cercidiphyllum' 'Ligustrum' 'Liriodendron' 'Pinus' 'Abies' 'Ostrya' 'Cedrus' 'Paulownia' 'Thuja' 'Malus' 'Pyrus' 'Betula' 'Ulmus' 'Cercis' 'Robinia' 'Fraxinus' 'Crataegus' 'Gleditsia' 'Ginkgo' 'Mespilus' 'Salix' 'Magnolia' 'Populus' 'Chamaecyparis' 'Diospyros' 'Morus' 'Pterocarya' 'Corylus' 'Sorbus' 'Cydonia' 'Parrotia' 'Zelkova' 'Alnus' 'Cladrastis' 'Fontanesia' 'Cornus' 'Toona' 'Catalpa' 'Ilex' 'Buxus' 'Metasequoia' 'Gymnocladus' 'Maclura' 'Cephalotaxus' 'Rhus' 'Castanea' 'Ailanthus' 'Broussonetia' 'Sequoiadendron' 'Lagerstroemia' 'Pterostyrax' 'Eucalyptus' 'Olea' 'Ficus' 'Carpinus' 'Sambucus' 'Picea' 'Amelanchier' 'Laburnum' 'Phillyrea' 'Sequoia' 'Aralia' 'Phellodendron' 'Elaeagnus' 'Ehretia' 'Poncirus' 'Albizia' 'Melia' 'Nothofagus' 'Cupressus' 'Trachycarpus' 'Platycladus' 'Torreya' 'Calocedrus' 'Abelia' 'Staphylea' 'Photinia' 'Clerodendrum' 'Davidia' 'Firmiana' 'Zanthoxylum' 'Taxodium' 'Eucommia' 'Nyssa' 'Cotoneaster' 'Osmanthus' 'x Cupressocyparis' 'Non spécifié' 'Laurus' 'Arbutus' 'Araucaria' 'Cryptomeria' 'Cunninghamia' 'Thujopsis' 'Lonicera' 'Hovenia' 'x Chitalpa' 'Eriobotrya' 'Pistacia' 'Laburnocytisus' 'Tapiscia' 'Larix' 'Carya' 'Distylium' 'Tamarix' 'Ptelea' 'Cotinus' 'Chimonanthus' 'Acacia' 'Washingtonia' 'Brahea' 'Cordyline' 'Phoenix' 'Hibiscus' 'Tsuga' 'Stewartia' 'Paraserianthes' 'Hippophae' 'Carica' 'Styrax' 'Sassafras' 'Juniperus' 'Heptacodium' 'Punica' 'Pseudotsuga' 'Rhododendron' 'Viburnum' 'Poliothyrsis' 'Caragana' 'Asimina' 'Platycarya' 'Phyllanthus' 'Alangium' 'Euscaphis' 'Enkianthus' 'Sycopsis' 'Cinnamomum' 'Ziziphus' 'Maackia' 'Philadelphus' 'Syringa' 'Euonymus' 'Acca' 'Fremontodendron' 'Rhamnus' 'Callistemon' 'Aronia' 'Luma' 'Genista' 'Brachychiton' 'Idesia' 'Kalopanax' nan 'Hemiptelea' 'x Sorbopyrus' 'Xanthoceras' 'Sciadopitys' 'Parrotiopsis' 'Podocarpus' 'Chionanthus' 'Garrya' 'Crataegomespilus'] espece ['hippocastanum' 'baccata' 'negundo' 'daniellii' 'x hispanica' 'japonica' 'n. sp.' 'sylvatica' 'occidentalis' 'tomentosa' 'robur' 'paniculata' 'rufinerve' 'styraciflua' 'nigra' 'japonicum' 'lucidum' 'tulipifera' 'concolor' 'saccharinum' 'x europaea' 'platyphyllos' 'platanoides' 'serrulata' 'carpinifolia' 'libani' 'wallichiana' 'floribunda' 'pendula' 'siliquastrum' 'pseudoacacia' 'excelsior' 'laevigata' 'pseudoplatanus' 'triacanthos' 'cerasifera' 'campestre' 'biloba' 'buergerianum' 'germanica' 'cerris' 'regia' 'sylvestris' 'rubra' 'nigra subsp. nigra' 'alba' 'tataricum subsp. ginnala' 'domestica' 'calleryana' 'cappadocicum' 'x carnea' 'lawsoniana' 'x turneri' 'utilis' 'maackii' 'kaki' 'cordata' 'persica' 'fraxinifolia' 'frainetto' 'avium' 'x soulangeana' 'colurna' 'torminalis' 'petraea' 'ilex' 'oblonga' 'davidii' 'communis' 'monspessulanum' 'papyrifera' 'kobus' 'suber' 'phellos' 'canariensis' 'ornus' 'glutinosa' 'castaneifolia' 'babylonica' 'capillipes' 'minor' 'x media' 'henryana' 'phillyreoides' 'opalus' 'mas' 'sinensis' 'bignonioides' 'triacanthos f. Inermis' 'australis' 'aquifolium' 'grandiflora' 'sempervirens' 'incana' 'babylonica var. pekinensis' 'sargentii' 'macrophyllum' nan 'glyptostroboides' 'deodara' 'dioica' 'pomifera' 'harringtonii' 'typhina' 'sativa' 'x subhirtella' 'heldreichii' 'giraldii' 'giganteum' 'indica' 'aria' 'hispida' 'caprea' 'mongolica' 'gunnii' 'europaea' 'monogyna' 'carica' 'betulus' 'pungens f. Glauca' 'x arnoldiana' 'x loebneri' 'lamarckii' 'controversa' 'salicifolia' 'anagyroides' 'latifolia' 'americana' 'spectabilis' 'spinosa' 'kousa' 'deltoides' 'amurense' 'angustifolia' 'pumila' 'altissima' 'dicksonii' 'aucuparia' 'lotus' 'trifoliata' 'julibrissin' 'azedarach' 'laurocerasus' 'mahaleb' 'kentukea' 'rubrum' 'lusitanica' 'trilobata' 'obliqua' 'abies' 'palmatum' 'pauciflora' 'plicata' 'arizonica' 'avellana' 'fortunei' 'pinsapo' 'orientalis' 'griseum' 'pungens' 'strobus' 'simonii' 'decurrens' 'x spaethii' 'triflorum' 'triflora' 'lasiocarpa' 'colchica' 'florida' 'x fraseri' 'tremula' 'trichotomum' 'libani subsp. atlantica' 'serrata' 'nigra subsp. laricio' 'imbricaria' 'nootkatensis' 'virginiana' 'dentata' 'stenoptera' 'xerubescens' 'involucrata' 'simplex' 'californica' 'simulans' 'distichum' 'ulmoides' 'rosmarinifolia' 'intermedia' 'x burkwoodii' 'leylandii' 'bungeana' 'incisa' 'nobilis' 'araucana' 'pensylvanicum' 'padus' 'x watereri' 'albosinensis' 'macrocarpa' 'flava' 'lanceolata' 'breweriana' 'Fruit n. sp.' 'toringoides' 'denudata' 'dolabrata' 'coccinea' 'dulcis' 'tashkentensis' 'involucrata var. vilmoriniana' 'engelmannii' 'x canadensis' 'variabilis' 'macranthera' 'ermanii' 'nivalis' 'sanguinea' 'x lavalleei' 'x purpurea' 'glabra' 'omorika' 'mariana' 'seguinii' 'funebris' 'numidica' 'crus-galli' 'macrophylla' 'speciosa' 'terebinthus' 'adamii' 'x altaclerensis' 'fargesii' 'pavia' 'acalycina' 'acuminata' 'sinensis Oliv.' 'decidua' 'pinaster' 'transitoria' 'acutissima' 'balearica' 'x rehderiana' 'ovata' 'pictum' 'koraiensis' 'racemosum' 'ramosissima' 'x margaretta' 'pennsylvanica' 'tschonoskii' 'heterophyllus' 'x berolinensis' 'coggygria' 'carpinifolium' 'pubescens' 'praecox' 'tetrandra' 'ioensis' 'stellata' 'arborea' 'ovalifolium' 'dealbata' 'prunifolia' 'parviflora' 'microphylla' 'aucuparia var. edulis' 'pinea' 'chinensis' 'nordmanniana' 'bracteata' 'toringo' 'x atrosanguinea' 'robusta' 'armata' 'wagnerianus' 'chinense' 'laevis' 'x yedoensis' 'canadensis' 'syriacus' 'phillyreoides subsp. fortunei' 'x zoeschense' 'heterophylla' 'kaempferi' 'mandshurica' 'cembra' 'banksiana' 'pyrenaica' 'rysophylla' 'pseudocamellia' 'x schmittii' 'x robusta' 'lenta' 'lophantha' 'populifolia' 'unedo' 'coccifera' 'rhamnoides' 'elata' 'papaya' 'x blireana' 'x zumi' 'officinalis' 'japonicus' 'x rosacea' 'x brooklynensis' 'palustris' 'antarctica var. uliginosa' 'albidum' 'viminalis' 'aurita' 'miconioides' 'purpurea' 'glandulosa' 'granatum' 'trichotomum var. fargesii' 'baccata f. Aurea' 'x thuringiaca' 'jeffreyi' 'alleghaniensis' 'menziesii' 'sieboldii' 'arboreum' 'radiata' 'europea' 'davidiana' 'serrula' 'x Sepulcralis' 'exigua' 'x pendulina' 'tripetala' 'halepensis' 'pisifera' 'pendula var. pendula' 'tinus' 'maximowicziana' 'udensis' 'saccharum' 'maxima' 'mugo' 'freemanii' 'cinerea' 'x canescens' 'fruticosa' 'pekinensis' 'triloba' 'pontica' 'scalaris' 'vilmorinii' 'viscosa' 'quadrangulata' 'umbellata' 'kousa var. chinensis' 'x durettii' 'bicolor' 'suber subsp. Occidentalis' 'augustinii' 'strobilacea' 'yunnanensis' 'glaucus' 'hemsleyanus' 'platanifolium' 'davurica' 'medwediewii' 'turczaninowii' 'henryi' 'x coriaceum' 'camphora' 'jujuba' 'copallina' 'amurensis' 'odoratissimum' 'coronarius' 'nigra subsp. salzmannii' 'humilis' 'antarctica' 'decora' 'x hollandica' 'monogyna var. monogyna' 'europaeus' 'sellowiana' 'vulgaris' 'californicum' 'alaternus' 'chequen' 'x chinensis' 'x ambigua' 'marilandica' 'Fleur n. sp.' 'sinense' 'armeniaca' 'bungei' 'glabra Huds.' 'minor var. vulgaris' 'obovatus' 'vulgare' 'x flavescens' 'illinoinensis' 'pyrifolia' 'x hillieri' 'dasystyla' 'x macrantha' 'acerifolius' 'horizontalis' 'formosana' 'polycarpa' 'x mutabilis' 'x gondouinii' 'lusitanica subsp.azorica' 'dasystyla subsp. caucasica' 'labilis' 'coulteri' 'faginea' 'grandis' 'piperitum' 'obtusa' 'kiusiana' 'oliveri' 'x libanerris' 'trojana' 'septemlobus' 'oliverianum' 'rufa' 'sieboldianum' 'liliiflora' 'sabiniana' 'hypoleuca' 'circinatum' 'sprengeri' 'x proctoriana' 'maximowiczianum' 'corymbosa' 'jessoensis' 'baccata var. mandshurica' 'sinica' 'potaninii' 'serotina' 'persica var.nucipersica' 'tricuspidata' 'biondii' 'occidentalis var. reticulata' 'diabolicum' 'turbinata' 'hyrcanum' 'x conspicuum' 'major' 'hirsuta' 'x colurnoides' 'x erubescens' 'tenuifolia' 'vestita' 'hybrida' 'acerifolia' 'bipinnata' 'americanum' 'duclouxii' 'velutina' 'x flaccida' 'sorbifolium' 'pardei' 'cilicica' 'koreana' 'nebrodensis' 'verticillata' 'cissifolium' 'wilsonii' 'jacquemontiana' 'cathayana' 'rigida' 'densiflora' 'ponderosa' 'monophylla' 'x ebbingei' 'vilmoriniana' 'cathartica' 'viridis' 'chrysocarpa var. phoenicea' 'x lettermanii' 'x sorbifolia' 'x persimilis' 'tournefortii' 'contorta var. latifolia' 'acutifolia' 'procera' 'ailantifolia' 'microcarpa' 'macrophyllus' 'sabina' 'gemmata' 'recurvata' 'cephalonica' 'homolepis' 'smithiana' 'koyamai' 'glauca' 'obovata' 'glehnii' 'likiangensis' 'sitchensis' 'asperata' 'schrenkiana' 'biltmoreana' 'retusus' 'rhytidophyllum' 'elliptica' 'brevifolia' 'miqueliana' 'x marschlinsii' 'verniciflua' 'myrtilloides' 'fragilis' 'x bixbyi' 'cordiformis' 'trichocarpa' 'rhoifolia' 'forrestii' 'luminifera' 'x caerulea' 'platyphylla' 'curdica' 'x neglecta' 'fecunda' 'canbyi' 'spathulata' 'aprica' 'ambigua' 'venustula' 'rotundifolia var. aboriginum' 'champlainensis' 'szechuanica var. tibetica' 'taurica' 'muehlenbergii' 'ithaburensis var. macrolepis' 'lobata' 'x kewensis' 'ilicifolia' 'x heterophylla' 'falcata' 'delavayi subsp. potaninii']
#### Barplot des variables qualitatives
nu = df_filtered[quali].nunique().reset_index()
nu.columns = ['feature','nunique']
plt.figure(figsize=(15,10))
sns.barplot(x='feature', y='nunique', data=nu)
plt.show()
group_name=["A","JA", "J", "M"]
df_filtered.stade_developpement.value_counts().plot.pie(figsize=(10, 8), autopct='%1.1f%%', label="Stade de développement")
plt.title("Répartition des stades de développement", fontsize=15, fontweight='bold')
plt.legend(labels=group_name,bbox_to_anchor=(1, 1))
plt.show()
arbrepararrondissement = df_filtered['arrondissement'].value_counts().tolist()
arrondissements = df_filtered['arrondissement'].unique().tolist()
listStadeDev = ['A', 'J', 'M', 'JA']
sns.catplot(data=df_filtered, kind="bar", x=arbrepararrondissement, y=arrondissements)
plt.title('Nombre arbres par arrondissement', fontsize=15, fontweight='bold')
plt.xlabel('Nombre d\'arbres')
plt.ylabel('Arrondissement')
plt.show()
## Nous pouvons utiliser les données GPS pour tracer la position des arbes
plt.figure(figsize=(8,6))
sns.scatterplot(data=df, x="geo_point_2d_b", y="geo_point_2d_a")
plt.show()
## Nous pouvons aussi utiliser folium pour tracer la position des arbes sur la carte de Paris
import folium
paris_map = folium.Map(location=[48.85, 2.35], )
for ind, lat, lon, com in df_filtered[['geo_point_2d_a', 'geo_point_2d_b', 'lieu']][:10000].itertuples():
paris_map.add_child(folium.RegularPolygonMarker(location=[lat,lon], popup=com, fill_color='green', radius=5))
paris_map